import axios from "axios";
import { ElMessage } from 'element-plus'
import { useLoginStore } from '../../stores/index.js'
import router from '../../../src/router/router.js' // 引入路由实例

// 创建axios实例
const service = axios.create({
    baseURL: '/platformSchool',
    timeout: 5000,
})

/**
 * 请求拦截器
 * 自动添加token到请求头
 */
service.interceptors.request.use(
    (config) => {
        const loginStore = useLoginStore()
        
        // 如果不是无需token的请求，添加token
        if (!config.noToken && loginStore.token) {
            config.headers['Authorization'] = `Bearer ${loginStore.token}`
        }
        
        // 设置默认Content-Type
        if (!config.headers['Content-Type']) {
            config.headers['Content-Type'] = 'application/json'
        }
        
        console.log('请求配置:', config)
        return config
    },
    (error) => {
        console.error('请求错误:', error)
        return Promise.reject(error)
    }
)

/**
 * 响应拦截器
 * 处理API响应数据和错误情况
 */
service.interceptors.response.use(
    (response) => {
        console.log("响应数据:", response.data)
        
        // 根据后端返回的数据结构处理
        const { code, message, data } = response.data
        
        // 如果请求成功，直接返回数据
        if (code === 200 || code === 0) {
            return data !== undefined ? data : response.data
        }
        
        // 业务逻辑错误处理
        ElMessage({
            message: message || '操作失败',
            type: 'error',
            duration: 3000
        })
        
        return Promise.reject(new Error(message || 'Error'))
    },
    (error) => {
        console.error('响应错误:', error)
        
        // HTTP状态码错误处理
        if (error.response) {
            const { status, data } = error.response
            
            switch (status) {
                case 401:
                    ElMessage({
                        message: '登录已过期，请重新登录',
                        type: 'error',
                        duration: 3000
                    })
                    // 清除token并跳转到登录页
                    const loginStore = useLoginStore()
                    loginStore.logout()
                    router.push('/login')
                    break
                    
                case 403:
                    ElMessage({
                        message: '没有权限访问',
                        type: 'error',
                        duration: 3000
                    })
                    break
                    
                case 404:
                    ElMessage({
                        message: '请求资源不存在',
                        type: 'error',
                        duration: 3000
                    })
                    break
                    
                case 500:
                    ElMessage({
                        message: '服务器内部错误',
                        type: 'error',
                        duration: 3000
                    })
                    break
                    
                default:
                    ElMessage({
                        message: data?.message || `请求错误: ${status}`,
                        type: 'error',
                        duration: 3000
                    })
            }
        } else if (error.request) {
            // 网络错误
            ElMessage({
                message: '网络连接失败，请检查网络',
                type: 'error',
                duration: 3000
            })
        } else {
            // 其他错误
            ElMessage({
                message: error.message || '请求发生错误',
                type: 'error',
                duration: 3000
            })
        }
        
        return Promise.reject(error)
    }
)

export default service